#include "widget.h"
#include "ui_widget.h"
#include <thread>
#include <QTimer>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
//    version1
//    timer = new QTimer(this);

//    connect(timer, &QTimer::timeout, this, &Widget::updateNum);
//    timer->start(1000);


//    version2  循环会使构造函数无法正常执行完
//    int value = ui->lcdNumber->intValue();

//    while(1)
//    {
//        std::this_thread::sleep_for(std::chrono::seconds(1));   // 睡眠一秒
//        if(value <= 0) break;
//        ui->lcdNumber->display(value - 1);
//    }

//    // version3 不允许在非主线程来修改GUI
//    std::thread t([=](){
//       int value = ui->lcdNumber->intValue();
//       while(1)
//       {
//           std::this_thread::sleep_for(std::chrono::seconds(1));
//           if(value <= 0) break;
//           ui->lcdNumber->display(value-1);
//       }

//    });

    //使用Qtimer来修改
    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, [this](){
        int value = ui->lcdNumber->intValue();
        if(value <= 0) {
            timer->stop();
            return;
        }
        ui->lcdNumber->display(value - 1);
    });
    timer->start(1000);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::updateNum()
{
    qDebug() << ui->lcdNumber->intValue();

    int value = ui->lcdNumber->intValue();
    if(value <= 0)
    {
        timer->stop();
        return;
    }
    ui->lcdNumber->display(value - 1);
}

